package com.text.main;

import com.text.config.Configration;
import com.text.service.Service;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
import java.util.Random;


import static com.text.speaker.JacobTestController.textToSpeech;

public class Main {

    public static void main(String[] args) throws InterruptedException {
//        ===================1.前期准备，加载信息========================
//        加载配置类
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(Configration.class);
//        加载service接口，这里并没有直接调用service实现类
        Service service = context.getBean(Service.class);
//        接收数据库中的学生名字
        List<String> and =service.findByName("1");



//        ====================2.工具准备================================
//        标记变量，少写了一个数据库，所以这里要写一个标记变量
        int sum=0;
//        哨兵，模仿自快排的哨兵，记录当前的姓名在数列中的索引
        int[] solder =new int [service.findByName("1").size()];
//        随机数字，旨在生成一个随机变量，然后按照索引点名
        Random random=new Random();





//        ====================3.开始点名=======================

        long startTime = System.currentTimeMillis();    //获取开始时间
        while (sum<service.findByName("1").size()){//记录数字在这里起作用
            int a=random.nextInt((solder.length));//哨兵在这里起作用
            if(solder[a]==0){
//                System.out.println(a);//这行语句用于测试
                System.out.println(and.get(a));//这里打印当前随机"点到"的姓名
                textToSpeech(and.get(a));//这里把随机颠倒的姓名念出来,即语音生成文字
                Thread.sleep(1000);//考虑到每次点名,需要按一次enter太麻烦,这里让它自动运行,时间间隔两秒
                solder[a]=1;//哨兵再次起作用
                sum++;//标记函数增加
            }



        }
        long endTime = System.currentTimeMillis();    //获取结束时间
        textToSpeech("一共耗时"+(endTime-startTime)/1000+"秒");//计算耗费时间
        textToSpeech("一共"+sum+"个人");//计算一共点了多少次名


    }
}
